package jmu.cultural_tourism.service.impl;

import jmu.cultural_tourism.entity.CityInfo;
import jmu.cultural_tourism.dao.CityInfoDao;
import jmu.cultural_tourism.service.CityInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.PageRequest;
import org.springframework.stereotype.Service;

import java.util.List;


/*城市文旅表(CityInfo)表服务实现类*/
@Service("cityInfoService")
public class CityInfoServiceImpl implements CityInfoService {
    @Autowired
    private CityInfoDao cityInfoDao;

    /**
     * 通过ID查询单条数据
     *
     * @param cityId 主键
     * @return 实例对象
     */
    @Override
    public CityInfo queryById(Integer cityId) {
        return this.cityInfoDao.queryById(cityId);
    }

    /**
     * 分页查询所有城市文旅信息（无条件）
     * 修改返回类型为Page<CityInfo>，与控制器保持一致
     */
    @Override
    public Page<CityInfo> queryAllCity(PageRequest pageRequest) {
        // 查询当前页数据
        List<CityInfo> cityList = cityInfoDao.queryAllCity(pageRequest);
        // 查询总条数
        long total = cityInfoDao.countAllCity();
        // 封装为Page对象返回
        return new PageImpl<>(cityList, pageRequest, total);
    }

    /**
     * 分页查询（带条件）
     *
     * @param cityInfo    筛选条件
     * @param pageRequest 分页对象
     * @return 查询结果
     */
    @Override
    public Page<CityInfo> queryByPage(CityInfo cityInfo, PageRequest pageRequest) {
        long total = this.cityInfoDao.count(cityInfo);
        return new PageImpl<>(this.cityInfoDao.queryAllByLimit(cityInfo, pageRequest), pageRequest, total);
    }

    /**
     * 新增数据
     *
     * @param cityInfo 实例对象
     * @return 实例对象
     */
    @Override
    public CityInfo insert(CityInfo cityInfo) {
        this.cityInfoDao.insert(cityInfo);
        return cityInfo;
    }

    /**
     * 修改数据
     *
     * @param cityInfo 实例对象
     * @return 实例对象
     */
    @Override
    public CityInfo update(CityInfo cityInfo) {
        this.cityInfoDao.update(cityInfo);
        return this.queryById(cityInfo.getCityId());
    }

    /**
     * 通过主键删除数据
     *
     * @param cityId 主键
     * @return 是否成功
     */
    @Override
    public boolean deleteById(Integer cityId) {
        return this.cityInfoDao.deleteById(cityId) > 0;
    }
}